﻿// 893. 集合-Nim游戏.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//


/*
https://www.acwing.com/problem/content/895/
给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S。

现在有两位玩家轮流操作，每次操作可以从任意一堆石子中拿取石子，每次拿取的石子数量必须包含于集合 S，最后无法进行操作的人视为失败。

问如果两人都采用最优策略，先手是否必胜。

输入格式
第一行包含整数 k，表示数字集合 S 中数字的个数。

第二行包含 k 个整数，其中第 i 个整数表示数字集合 S 中的第 i 个数 si。

第三行包含整数 n。

第四行包含 n 个整数，其中第 i 个整数表示第 i 堆石子的数量 hi。

输出格式
如果先手方必胜，则输出 Yes。

否则，输出 No。

数据范围
1≤n,k≤100,
1≤si,hi≤10000
输入样例：
2
2 5
3
2 4 7
输出样例：
Yes



37
2460 924 2124 1527 3342 798 4402 1593 4586 934 3769 4053 1389 3898 29 927 266 1895 1115 4007 773 4707 4858 1894 3077 1126 1304 4469 719 1537 906 1700 2622 3788 4357 1337 4704
50
3079 988 2449 1533 711 162 4061 3278 3501 2629 3983 744 3235 4952 3851 1947 4785 785 694 1146 1245 3969 771 2398 3863 4806 2142 4109 532 485 1210 1143 3824 3406 4357 2452 899 
4592 4159 2637 2837 1397 3718 2539 1550 2640 1861 827 2639 519


8
1648 5136 9304 2634 8451 1610 1105 8881
100
7518 7853 6871 5953 6276 1518 3357 6942 6676 4208 7722 6083 4336 7381 1469 9653 8208 8845 4081 1121 5247 6350 7869 4405 8763 8001 9039 6344 7749 8310 581 6701 9009 3667 7283 8017 9343 3296 8765 3673 9026 4086 5568 1171 6359 2519 2095 3813 744 7967 7027 5677 2661 8450 4845 3042 1302 6311 3395 722 9411 5849 1663 4329 3877 3365 3723 611 2932 9649 5657 3674 1136 605 7 2865 1768 6912 5078 3326 2647 6873 6557 4163 6307 710 7303 5182 7411 485 8277 5700 8364 9768 7597 1687 1846 6600 1674 3377
*/


#include <iostream>
#include <unordered_set>
#include <cstring>
#include <vector>

using namespace std;

const int N = 10010;
int sg[N];
vector<int> v;
vector<int> a;
int k, n;

int dfs(int x) {
	if (sg[x] != -1) return sg[x];
	 
	unordered_set<int> s;

	for (int i = 0; i < k; i++) {
		if(x>=v[i])
			s.insert(dfs(x - v[i]));
	}

	for (int i = 0; i < N; i++) {
		if (s.count(i) == 0) {
			sg[x] = i; break;
		}
	}
	if (sg[x] == -1) sg[x] = 0;
	return sg[x];
}


void init() {
	sg[0] = 0;
	for (int i = 10000; i >= 0; i--) {
		dfs(i);
	}
}



int main()
{
	memset(sg, -1, sizeof sg);
	cin >> k;
	for (int i = 0; i < k; i++) {
		int t; cin >> t;
		v.push_back(t);
	}
	init(); //用到在计算 不用事先全部计算
	cin >> n;
	int sum = 0;
	for (int i = 0; i < n; i++) {
		int t; cin >> t;
		if (sg[t] == -1) sg[t] = 0;
		sum ^= sg[t];
		//cout << "t=" << t << ", sg[t] =" << sg[t] << ", res = " << sum << endl;
	}

	if (sum) {
		cout << "Yes" << endl;
	}
	else {
		cout << "No" << endl;
	}
	


	return 0;
}

 